package z3;

import static java.lang.Math.*;

class LiczbaException extends  Exception //defincija wyjatku
{
    LiczbaException(String w)
    {
        super(w);
    }
}

public class Liczba //definicja klasy
{
    private int n;
    private static String[] tab ={"a","b","c","d","e","f"};
    Liczba(String n, int podstawa) throws LiczbaException 
    {
        n = n.toLowerCase();
        int dana = 0;
        int i;
        int rozmiar = n.length();//dlugosc lancucha znakow
        int wynik =0;
        if(podstawa < 2 || podstawa > 16) throw new LiczbaException("Blad podstawy.");
        for(int j=0;j<rozmiar;j++)
        {
            int war = n.charAt(j);
            dana =0;
            if (war > 96 && war< 103)
            {
                dana= 10 + war-97;//obsluguj znaki od a do f
            }
            else
            {
                if(war>47 && war<57)
                {
                    int a = war -48;
                    if (a != podstawa) {dana= a;} //obsluguj liczby
                }
                else 
                    throw new LiczbaException("Wystaplil nieprawidlowy znak.");//np specjalny
                
            }
            if(dana >= podstawa)
            {
                wynik =0;
                throw new LiczbaException("Liczba zle napisana");//nieodpowienia liczba w stosunku do podstawy
            }
            wynik+= dana*(pow(podstawa,rozmiar-j-1));
        }
        this.n = wynik;
        try
        {
	        for(int g=2;g<17;g++)
	        {
	        	 System.out.println("Zapis w systemie"+ " " + g+ "wynosi: " + zapis(liczba));
	        }
        }
        catch(LiczbaException e)
        {
            System.out.println(e.getMessage());
        }
        catch(NumberFormatException e)
        {
            System.out.println(args[i] + " " + "Liczba nieprawidlowego formatu.");
        }
    }
    public String zapis(int podstawa) throws LiczbaException //metoda zwracajaca liczbe w podanym systemie
    {
        int liczba =n;
        String ciagOstateczny = "";
        String R;
        int reszta =0;
        if(podstawa <2 || podstawa>16) throw new LiczbaException("Nieprawidlowa podstawa");
        if(this.n <=0) return "0";
        for(;liczba!=0;)
        {
            reszta = liczba % podstawa;
            if(reszta >9)
            {
                R = "" + tab[(reszta % 10)];
            }
            else R = "" + reszta; 
            ciagOstateczny =R + ciagOstateczny;
            liczba = liczba / podstawa;
        }
        return ciagOstateczny;
    }
}